package com.hdp.kotlin_samples.base

/**
 * author:hdp
 * on:2019/6/12:11:11
 * desc:
 * kotlin中String的使用
 * 1、普通使用，像Java一样
 * 2、字符串模板，在字符串里面医用变量：${}
 * 3、带格式的字符串（原始字符串）,三个引号："""
 *
 * important: 和IndexOutOfBoundsException 说bye bye
 * 1、使用：getOrNull访问字符串，越界会返回null,
 *      多说一句，集合一般也有这种安全的访问方式，
 *      多说两句，这其实是CharSequence的一个扩展函数，类似的扩展函数还有很多，没有例举：
 *          firstOrNull(predicate: (Char) -> Boolean)：满足条件的第一个字符
 *          indexOfFirst(predicate: (Char) -> Boolean):满足条件的第一个字符的位置
 *          indexOfLast(predicate: (Char) -> Boolean)：满足条件的最后一个字符的位置
 *          .....
 */


fun main() {
    test_string1()
//    test_string2()
//    test_string3()
}

//通过索引访问
private fun test_string1() {
    val slogan = "花更少的钱，玩更好的手机"
    println(slogan[0])
    println(slogan[slogan.length - 1])
//    println(slogan.get(110)) //常规访问方式，越界
    println(slogan.getOrNull(110))  //如果越界会返回null
}

/**
 * 字符串模板表达式是一段代码，它计算并将结果返回到字符串中。
 * 字符串模板以美元符号$开头，其中包含变量名称或花括号中的任意表达式。
 */
private fun test_string2() {
    val i = 10
    println("i = $i")//i=10
    val str = "abcd"
    println("$str 是一个字符串，它的长度是：${str.length}")
}

/**
 * """abc"""
 * 原始字符串中的字符串模板
 * trimMargin()删除前导空格
 * 默认情况下，trimMargin()函数使用|作为保证前缀。
 */
private fun test_string3() {
    val a = 10
    val b = 5
    val myString = """value $a
                #is greater than value $b
                """.trimMargin("#")
    println("${myString.trimMargin("#")}")
}
